<?
# 텍스트큐브 용 Draco 안티스팸
# 제작자 : Draco 
# 제작일 : 2008. 7. 22
# 문의 : http://draco.pe.kr 

#내용에 한글이 들어있나 체크합니다.
function hangul_chk($das_keyword) {
	return preg_match('/[\x{1100}-\x{11ff}\x{3130}-\x{318f}\x{ac00}-\x{d7af}]+/u', $das_keyword);
}

#.htm이나 .html로 끝나는 링크주소는 99.9% 스팸임을 이용해 차단합니다.
#2008년 봄에 유행했던 한글번역스팸의 URL도 체크추가
function html_url_chk($das_keyword) {
	return !(stristr($das_keyword, '.htm')||(preg_match('@http://[^/]*(hot|wet)[^/]*(women|girl)[^/]*2008[^/]*(com|net)@',$das_keyword) > 0));	
}

#필터 키워드들을 체크합니다.
function filter_chk($das_keyword){
	#필터 배열. 댓글 본문과 트랙백 제목,내용, 리퍼러로그 URL을 체크하는데 사용합니다.
	$filters = array('sex','casino', 'porno', 'adult', 'mature', 'xxx', 'fuck', 'lesbian', 'nude', 'gambling', 'poker', 'goodslim', 'betting', 'buy', 'penis', 'doggie', 'dick', 'cumshot', 'topless', 'pussy', 'strip', 'n95bD0l34bS2z3', 'slots', 'renter', '<iframe', 'viagra', '무료상담', '포커', '바둑이', '실전경마', '경마베팅', '현금게임', '카지노', '우수한과', '위치 축하!', '동일할 좋을', '너를 감사하십시요', '경이롭 ', '위치의 현재 팬이', '웹사이트가 있는다', '방문한 즐기는', '나는 너에 합의한다', '보는 위치가 있는다', '그것 찾아본 즐겼다', '그것은 이렇게 이다', '차가운 위치', '재미있는 지점', '나는 그것을 감사', '중대한 위치', '우수한 일', '유용한 위치', '아주 좋은 위치!', 'orgie',  'naked',  'breast',  'blowjob',  'blow job',  'pornstar',  'pistol',  'wives',  'blonde',  'hotel',  'shemale',  'wife',  'cock',  'teenage',  'undress',  'nurse',  'oral',  'slave',  'webcam',  'juicy',  'bdsm',  'erotic',  'bikini',  'vagina',  'chick',  'underwear',  'hentai',  'deepth',  'playboy',  'orgie',  '우수한 디자인!!',  '우수한 감사!',  '뉴스 있다!',  '아주 지점',  '걸출한 뉴스',  '종류 블로그',  '걸출한 디자인!',  '걸출한 블로그!',  '걸출한 위치!',  '많은 감사',  '동일할 지점을',  '나는 배웠다 매우',  '아주 보는',  '위치가 있는다',  '위치가 우수한',  '우수한 있는다',  '위치를차가운',  '만들었다!',  '위치를 즐기는',  '너의 방문한',  '뉴스를 위한',  '위한 감사합니다',  '블로그를 위한',  '아주 유용한 정보',  '나는 위치',  '그것을 감사',  '감사 좋아한다',  '아주 좋은 위치',  '우수한 위치',  '위치에 그것을',  '좋아했다!',  '좋은 디자인.',  '유익한뿐',  '재미있는다',  '이 위치는',  '저에서',  '유사한 역사는',  '같지 않는',  '위한 감사합니다',  '위치!',  '좋은 영역',  '걸축한 영역',  '그것 즐겼다',  '좋은 위치는',  '위치는 찾아본',  '친구는 너의',  '위치의 팬',  '팬이 되었다!', '대출', '감량', '바카라', '강원랜드', 'gostop', 'sayclub365', '미/팅', '화/상', '채/팅', '잭팟','카/지/노', '미/녀', '바/둑/이', '경/마', '포/커', '전자담배', '전자 담배','EnjoyPartner', 'kofree', '만남녀', '여성회원', '조건녀', '맞고', '바다이야기', '바독이', 'ㄷㅏㅇㅣㅇㅓ트', '웰니스', '뷰티몰', '55사이즈', '핑크콩', 'pinkcong.com', '포르노', '섹스','金光熱소장','cafe.daum.net/nobelforum');
	
	foreach($filters as $filter) {
	 if (stristr($das_keyword, $filter)) {$das_check=false; break;}
         else $das_check=true; 
	}
	return $das_check;
}

#정해진 시간 전의 시간코드를 계산해냅니다
function beforeTime()
{
	$SpamCriterionDay = 15;
	return (time()-$SpamCriterionDay*24*60*60);	
}

#정해진 시간 내에 같은 내용의 댓글이 있는지 검사합니다.
function sameComment_chk($das_keyword)
{
	global $database;
	
	$checktime = beforeTime();
	$sameComment_query = "SELECT `id` FROM `updates` WHERE `details` LIKE '".$das_keyword."' AND `created_time` > ".$checktime;
	$das_result=mysql_query($sameComment_query);
	$das_total = mysql_num_rows($das_result);
	
	if($das_total>0) return false;
	else return true;
}

#트랙백이 해당 포스팅에 마지막으로 달린 트랙백과 중복인지 체크합니다.
function sameTrackback_chk($das_entry,$das_subject,$das_excerpt)
{
	global $database;
	
	$sameTrackback_query = "SELECT `id` FROM `".$database['prefix']."Trackbacks` WHERE `entry` =".$das_entry." AND `excerpt` LIKE '".$das_excerpt."' ORDER BY `written` DESC LIMIT 1 ";
	$das_result=mysql_query($sameTrackback_query);
	$das_total = mysql_num_rows($das_result);

	if($das_total>0) return false;
	else return true;
}

#제목과 본문이 같거나, 홈페이지가 제목과 같거나, 홈페이지와 본문이 같은 댓글과 트랙백을 스팸으로 처리합니다
function same_section_chk($das_site,$das_subject,$das_excerpt)
{
	$das_site = str_replace("http://","",$das_site);

	if($das_site==$das_subject) return false;
	if($das_site==$das_excerpt) return false;
	if($das_excerpt==$das_subject) return false;
	else return true;
}


#문자열이 비어있지 않아야 true반환. 홈페이지란이 채워져 있는지 확인하는데 씁니다.
function empty_url($das_keyword)
{
	if(!empty($das_keyword)) return true;
	else return false;
}


#트랙백 부분 처리 함수
function DAS_AddingTrackback($target, $mother) {
	global $configVal;
	requireComponent('Tattertools.Function.misc');
	$data = misc::fetchConfigVal($configVal);
	if(!is_null($data) && array_key_exists('hangul_chk', $data)){
		$hangul_chk = $data['hangul_chk'];
	} else {
		$hangul_chk = 'true';
	}
	if(!is_null($data) && array_key_exists('filter_chk', $data)){
		$filter_chk = $data['filter_chk'];
	} else {
		$filter_chk = 'true';
	}
	if(!is_null($data) && array_key_exists('html_url_chk', $data)){
		$html_url_chk = $data['html_url_chk'];
	} else {
		$html_url_chk = 'true';
	}
	if(!is_null($data) && array_key_exists('sameTrackback_chk', $data)){
		$sameTrackback_chk = $data['sameTrackback_chk'];
	} else {
		$sameTrackback_chk = 'true';
	}
	if(!is_null($data) && array_key_exists('same_section_chk', $data)){
		$same_section_chk = $data['same_section_chk'];
	} else {
		$same_section_chk = 'true';
	}
	
	if($hangul_chk == 'true') if(!hangul_chk($mother['excerpt'])) return false;
	if($filter_chk == 'true') if(!filter_chk($mother['excerpt'])) return false;
	if($html_url_chk == 'true') if(!html_url_chk($mother['url'])) return false;
	if($sameTrackback_chk == 'true') if(!sameTrackback_chk($mother['entry'],$mother['subject'],$mother['excerpt'])) return false;
	if($same_section_chk == 'true') if(!same_section_chk($mother['url'],$mother['subject'],$mother['excerpt'])) return false;
	if(!empty_url($mother['url'])) return false;
	
	return true;
}

#댓글 관련 처리 함수
function DAS_AddingComment($target, $mother) {
	global $configVal;
	requireComponent('Tattertools.Function.misc');
	$data = misc::fetchConfigVal($configVal);
	if(!is_null($data) && array_key_exists('hangul_chk', $data)){
		$hangul_chk = $data['hangul_chk'];
	} else {
		$hangul_chk = 'true';
	}
	if(!is_null($data) && array_key_exists('filter_chk', $data)){
		$filter_chk = $data['filter_chk'];
	} else {
		$filter_chk = 'true';
	}
	if(!is_null($data) && array_key_exists('html_url_chk', $data)){
		$html_url_chk = $data['html_url_chk'];
	} else {
		$html_url_chk = 'true';
	}
	if(!is_null($data) && array_key_exists('sameComment_chk', $data)){
		$sameComment_chk = $data['sameComment_chk'];
	} else {
		$sameComment_chk = 'true';
	}
	if(!is_null($data) && array_key_exists('require_url', $data)){
		$require_url = $data['require_url'];
	} else {
		$require_url = 'false';
	}
	if(!is_null($data) && array_key_exists('same_section_chk', $data)){
		$same_section_chk = $data['same_section_chk'];
	} else {
		$same_section_chk = 'true';
	}
	
	if($hangul_chk == 'true') if(!hangul_chk($mother['comment'])) return false;
	if($filter_chk == 'true') if(!filter_chk($mother['name'])) return false;
	if($filter_chk == 'true') if(!filter_chk($mother['comment'])) return false;
	if($filter_chk == 'true') if(!filter_chk($mother['homepage'])) return false;
	if($html_url_chk == 'true') if(!html_url_chk($mother['homepage'])) return false;
	if($sameComment_chk == 'true') if(!sameComment_chk($mother['comment'])) return false;
	if($require_url == 'true') if(!empty_url($mother['homepage'])) return false;
	if($same_section_chk == 'true') if(!same_section_chk($mother['homepage'],$mother['name'],$mother['comment'])) return false;
	
	return true;
}

?>
